package mytree

// Branch 分支信息
type Branch struct {
	Id           Id       `json:"id"                  db:"branch_id"`           // 分支的 Id
	Uuid         string   `json:"uuid"                db:"uuid"`                // 分支的 UUId
	Owner        Id       `json:"owner"               db:"owner"`               // 所有都的 Id，此字段为外部输入，用于某种程度上减少外部表结构的调整需要
	RootId       Id       `json:"root_id"             db:"root_id"`             // 根节点 Id
	ParentId     Id       `json:"parent_id"           db:"parent_id"`           // 分支的父节点
	Layer        Layer    `json:"layer"               db:"layer"`               // 分支的层级结构，由分支 Id 构成并以 "/" 结尾
	Ordinal      int64    `json:"ordinal"             db:"ordinal"`             // 分支的排序
	Name         string   `json:"name"                db:"name"`                // 分支的名称
	ClientData   string   `json:"client_data"         db:"client_data"`         // 分支的备注
	DirectBranch Quantity `json:"direct_branch_count" db:"direct_branch_count"` // 子节点数量
	DirectLeaf   Quantity `json:"direct_leaf_count"   db:"direct_leaf_count"`   // 下属内容数量
	OwnBranch    Quantity `json:"own_branch_count"    db:"own_branch_count"`    // 下属分支数量
	OwnLeaf      Quantity `json:"own_leaf_count"      db:"own_leaf_count"`      // 下属内容数量
}

// hasParent 是否还有父节点
func (b *Branch) HasParent() bool {
	return b.ParentId != IdNil
}

func (b *Branch) IsChildOf(another *Branch) bool {
	return b.Layer.IsChildOf(another.Layer)
}

// IdList 获取分支包含的所有 Id
// 1. 如果解析错误将返回空数组及错误
// 2. 如果 Layer 是 nil 则返回 nil 及一个错误
func (b *Branch) IdList() ([]Id, Error) {
	return b.Layer.Parents()
}
